package fr.syntheses.blog.Model.DAO;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;


import fr.syntheses.blog.Service.ApplicationListener;
import fr.syntheses.blog.Service.GestionBaseDeDonnees;
import fr.syntheses.blog.beans.Article;
import fr.syntheses.blog.beans.Utilisateur;
import fr.syntheses.blog.Model.DAO.ModeleDAO;
import fr.syntheses.blog.Model.Mapping.Mapper;

public class UtilisateurDAO extends ModeleDAO{

	Logger log = Logger.getLogger(currentClassToLog);

	// Variables
	Connection connexion=null;
	ResultSet resultat=null;
	private List<Utilisateur> listeUtilisateur;
	// Mapper
	Mapper mapper = new Mapper();

    

    // retourner la liste des clients
	public List<Utilisateur> getListeUtilisateur()
	{	
		// Variables
		PreparedStatement requete=null;
		Utilisateur utilisateur=null;
		String requeteString=null;
		listeUtilisateur=new ArrayList<Utilisateur>();
		
		try
		{			
			// Ouverture d'une connexion
			connexion=super.getConnection();
			
			// requete pour la liste des clients
			requeteString="SELECT * FROM utilisateur WHERE 1 ORDER BY id";
			requete=connexion.prepareStatement(requeteString);
			
			// Execution de la requ�te
			resultat=requete.executeQuery();


			// On stocke le resultat dans une liste
			if(resultat!=null)
			{
				while(resultat.next())
				{
					log.debug(resultat.getString("nom"));

					// On effectue le mapping des attributs avec les champs de la table SQL
					utilisateur=mapper.mapperUtilisateur(resultat);
					
					// On ajoute l'objet a la liste des clients
					listeUtilisateur.add((Utilisateur)utilisateur);
				}
			}
		}
		catch(Exception e)
		{
			log.error("Erreur dans la requete dans la classe UtilisateurDAO fonction getListeUtilisateur");
		}
		finally
		{
			try
			{
				// Fermeture de la connexion
				if(resultat!=null)
				{
					GestionBaseDeDonnees.closeResulset(resultat);
				}
				if(requete!=null)
				{
					GestionBaseDeDonnees.closeRequest(requete);
				}
				if(connexion!=null)
				{
					GestionBaseDeDonnees.closeConnection(connexion);
				}
			}
			catch(Exception ex)
			{
				log.error("Erreur lors de la fermeture de la connexion avec la base de donn�es dans la classe UtilisateurDAO fonction getListeUtilisateur");
			}	
		}
		
		// Retourner la liste des clients
		return listeUtilisateur;
	}
	
   
    
 // trouver un utilisateur dans la base
 	public Utilisateur getUtilisateur(Utilisateur utilisateur) 
 	{
 		// Variables
 		PreparedStatement requete=null;
 		Utilisateur user=null;
 		String requeteString=null;
 		
 		try
 		{
 			// Ouverture d'une connexion
 			connexion=super.getConnection();
 			
 			// Cr�ation de la requ�te
 			requeteString = "SELECT * FROM utilisateur WHERE login=? and motdepasse=?";
 			
 			// On pr�pare la requ�te
 			requete=connexion.prepareStatement(requeteString);
 			requete.setString(1,utilisateur.getLogin());
 			requete.setString(2,utilisateur.getMotdepasse());
 				
 			// Execution de la requ�te
 			resultat=requete.executeQuery();

 			// On stocke le resultat dans l'objet client
 			if(resultat!=null)
 			{
 				if(resultat.first())
 				{
 					// On effectue le mapping des attributs avec les champs de la table SQL
 					user=mapper.mapperUtilisateur(resultat);
 				}
 			}
 		}
 		catch(Exception e)
 		{
 			user=null;
 			log.error("Erreur dans la requete dans la classe UtilisateurDAO fonction getUtilisateur" + e);
 		}
 		finally
 		{
 			try
 			{
 				// Fermeture de la connexion
 				if(resultat!=null)
 				{
 					GestionBaseDeDonnees.closeResulset(resultat);
 				}
 				if(requete!=null)
 				{
 					GestionBaseDeDonnees.closeRequest(requete);
 				}
 				if(connexion!=null)
 				{
 					GestionBaseDeDonnees.closeConnection(connexion);
 				}
 			}
 			catch(Exception ex)
 			{
 				log.error("Erreur lors de la fermeture de la connexion avec la base de donn�es dans la classe UtilisateurDAO fonction getUtilisateur");
 			}	
 		}
 		
 		return user;
 	} 

 	
	public String  getMdp(String email){
		PreparedStatement requete=null;
		Utilisateur utilisateur=null;
		String requeteString=null;
		String motdepasse="";
		
		try
		{			
			// Ouverture d'une connexion
			connexion=super.getConnection();
			
			// requete pour la liste des clients
			requeteString="SELECT motdepasse FROM utilisateur" +
					" WHERE email = ?";
			requete=connexion.prepareStatement(requeteString);
			requete.setString(1, email);
System.out.println(requete);
			resultat=requete.executeQuery();

			if(resultat.first())
			{
				
					motdepasse=resultat.getString("motdepasse");
					System.out.println("on passe ! " + motdepasse);
				}

			// On stocke le resultat dans une liste
		}
		catch(Exception e)
		{
			log.error("Erreur dans la requete dans la classe ArticleDAO fonction getListeArticle" + e);
		}
		finally
		{
			try
			{
				// Fermeture de la connexion
				if(resultat!=null)
				{
					GestionBaseDeDonnees.closeResulset(resultat);
				}
				if(requete!=null)
				{
					GestionBaseDeDonnees.closeRequest(requete);
				}
				if(connexion!=null)
				{
					GestionBaseDeDonnees.closeConnection(connexion);
				}
			}
			catch(Exception ex)
			{
				log.error("Erreur lors de la fermeture de la connexion avec la base de donn�es dans la classe UtilisateurDAO fonction getListeUtilisateur");
			}	
		}
		
	
		return motdepasse;
	
	}

 	
 	public void create() {
		throw new UnsupportedOperationException();
	}

	public void read() {
		throw new UnsupportedOperationException();
	}

	public void update() {
		throw new UnsupportedOperationException();
	}

	public void delete() {
		throw new UnsupportedOperationException();
	}
}